{
 "cells": [
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Populating the interactive namespace from numpy and matplotlib\n"
     ]
    }
   ],
   "source": [
    "%pylab inline"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# Test Cases for LSTM Training"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "This worksheet contains code that generates a variety of LSTM test cases. The output files are suitable for use with `clstmseq`."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "from pylab import *\n",
    "from scipy.ndimage import filters\n",
    "\n",
    "default_ninput = 2\n",
    "default_n = 29"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Here is a simple utility class to write out sequence data to an HDF5 file quickly."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "import h5py\n",
    "import numpy as np\n",
    "\n",
    "class H5SeqData:\n",
    "    def __init__(self,fname,N=None):\n",
    "        self.fname = fname\n",
    "        h5 = h5py.File(\"rnntest-\"+fname+\".h5\",\"w\")\n",
    "        self.h5 = h5\n",
    "        dt = h5py.special_dtype(vlen=np.dtype('float32'))\n",
    "        it = np.dtype('int32')\n",
    "        self.inputs = h5.create_dataset(\"inputs\",(1,), maxshape=(None,),compression=\"gzip\",dtype=dt)\n",
    "        self.inputs_dims = h5.create_dataset(\"inputs_dims\",(1,2), maxshape=(None,2), dtype=it)\n",
    "        self.outputs = h5.create_dataset(\"outputs\",(1,),maxshape=(None,),compression=\"gzip\",dtype=dt)\n",
    "        self.outputs_dims = h5.create_dataset(\"outputs_dims\",(1,2), maxshape=(None,2), dtype=it)\n",
    "        self.fill = 0\n",
    "        if N is not None: self.resize(N)\n",
    "    def close(self):\n",
    "        self.h5.close()\n",
    "        self.h5 = None\n",
    "    def __enter__(self):\n",
    "        print \"writing\",self.fname\n",
    "        return self\n",
    "    def __exit__(self, type, value, traceback):\n",
    "        self.close()\n",
    "        print \"done writing\",self.fname\n",
    "    def resize(self,n):\n",
    "        self.inputs.resize((n,))\n",
    "        self.inputs_dims.resize((n,2))\n",
    "        self.outputs.resize((n,))\n",
    "        self.outputs_dims.resize((n,2))\n",
    "    def add(self,inputs,outputs):\n",
    "        self.inputs[self.fill] = inputs.ravel()\n",
    "        self.inputs_dims[self.fill] = array(inputs.shape,'i')\n",
    "        self.outputs[self.fill] = outputs.ravel()\n",
    "        self.outputs_dims[self.fill] = array(outputs.shape,'i')\n",
    "        self.fill += 1\n",
    "\n",
    "N = 50000"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "def genfile(fname,f):\n",
    "    with H5SeqData(fname,N) as db:\n",
    "        for i in range(N):\n",
    "            xs,ys = f()\n",
    "            db.add(xs,ys)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {
    "collapsed": false
   },
   "outputs": [],
   "source": [
    "def plotseq(fname,index=17):\n",
    "    h5 = h5py.File(fname,\"r\")\n",
    "    try:\n",
    "        inputs = h5[\"inputs\"][index].reshape(*h5[\"inputs_dims\"][index])\n",
    "        outputs = h5[\"outputs\"][index].reshape(*h5[\"outputs_dims\"][index])\n",
    "        plot(inputs[:,0],'r-',linewidth=5,alpha=0.5)\n",
    "        if inputs.shape[1]>1:\n",
    "            plot(inputs[:,1:],'r-',linewidth=1,alpha=0.3)\n",
    "        plot(outputs,'b--')\n",
    "    finally:\n",
    "        h5.close()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "writing threshold\n",
      "done writing threshold\n"
     ]
    }
   ],
   "source": [
    "def generate_threshold(n=default_n,ninput=default_ninput,threshold=0.5,example=0):\n",
    "    \"No temporal dependencies, just threshold of the sum of the inputs.\"\n",
    "    x = rand(n,ninput)\n",
    "    y = 1.0*(sum(x,axis=1)>threshold*ninput).reshape(n,1)\n",
    "    return x,y\n",
    "\n",
    "genfile(\"threshold\", generate_threshold)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x7fbba481d590>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "plotseq(\"rnntest-threshold.h5\")"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "writing mod3\n",
      "done writing mod3\n"
     ]
    }
   ],
   "source": [
    "def generate_mod(n=default_n,ninput=default_ninput,m=3,example=0):\n",
    "    \"Generate a regular beat every m steps. The input is random.\"\n",
    "    x = rand(n,ninput)\n",
    "    y = 1.0*(arange(n,dtype='i')%m==0).reshape(n,1)\n",
    "    return x,y\n",
    "\n",
    "genfile(\"mod3\", generate_mod)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "data": {
      "image/png": "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\nGH5RcgAAAABJRU5ErkJggg==\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x7fbb8ae73f90>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "plotseq(\"rnntest-mod3.h5\")"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "writing dmod3\n",
      "done writing dmod3\n",
      "writing dmod4\n",
      "done writing dmod4\n",
      "writing dmod5\n",
      "done writing dmod5\n",
      "writing dmod6\n",
      "done writing dmod6\n"
     ]
    }
   ],
   "source": [
    "def generate_dmod(n=default_n,ninput=default_ninput,m=3,example=0):\n",
    "    \"\"\"Generate a regular beat every m steps, the input is random\n",
    "    except for the first dimension, which contains a downbeat\n",
    "    at the very beginning.\"\"\"\n",
    "    x = rand(n,ninput)\n",
    "    y = 1.0*(arange(n,dtype='i')%m==0).reshape(n,1)\n",
    "    x[:,0] = 0\n",
    "    x[0,0] = 1\n",
    "    return x,y\n",
    "\n",
    "genfile(\"dmod3\", generate_dmod)\n",
    "genfile(\"dmod4\", lambda:generate_dmod(m=4))\n",
    "genfile(\"dmod5\", lambda:generate_dmod(m=5))\n",
    "genfile(\"dmod6\", lambda:generate_dmod(m=6))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 11,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x7fbb855f6150>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "plotseq(\"rnntest-dmod3.h5\")"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 12,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "writing imod3\n",
      "done writing imod3\n",
      "writing imod4\n",
      "done writing imod4\n"
     ]
    }
   ],
   "source": [
    "def generate_imod(n=default_n,ninput=default_ninput,m=3,p=0.2,example=0):\n",
    "    \"\"\"Generate an output for every m input pulses.\"\"\"\n",
    "    if example:\n",
    "        x = array(arange(n)%4==1,'i')\n",
    "    else:\n",
    "        x = array(rand(n)<p,'i')\n",
    "    y = (add.accumulate(x)%m==1)*x*1.0\n",
    "    x = array(vstack([x]*ninput).T,'f')\n",
    "    y = y.reshape(len(y),1)\n",
    "    return x,y\n",
    "\n",
    "genfile(\"imod3\", generate_imod)\n",
    "genfile(\"imod4\", lambda:generate_imod(m=4))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 13,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x7fbb855ebbd0>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "plotseq(\"rnntest-imod3.h5\")"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 14,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "writing smod3\n",
      "done writing smod3\n",
      "writing smod4\n",
      "done writing smod4\n",
      "writing smod5\n",
      "done writing smod5\n"
     ]
    }
   ],
   "source": [
    "def generate_smod(n=default_n,ninput=default_ninput,m=3,r=0.5,example=0):\n",
    "    \"\"\"Generate an output for every m input pulses. The input\n",
    "    is band limited, so it's a little easier than generate_imod.\"\"\"\n",
    "    x = rand(n)\n",
    "    x = filters.gaussian_filter(x,r)\n",
    "    x = (x>roll(x,-1))*(x>roll(x,1))\n",
    "    y = (add.accumulate(x)%m==1)*x*1.0\n",
    "    x = array(vstack([x]*ninput).T,'f')\n",
    "    y = y.reshape(len(y),1)\n",
    "    return x,y\n",
    "\n",
    "genfile(\"smod3\", generate_smod)\n",
    "genfile(\"smod4\", lambda:generate_smod(m=4))\n",
    "genfile(\"smod5\", lambda:generate_smod(m=5))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 15,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "data": {
      "image/png": "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\nYII=\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x7fbb854d21d0>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "plotseq(\"rnntest-smod3.h5\")"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 16,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "writing anbn\n",
      "done writing anbn\n"
     ]
    }
   ],
   "source": [
    "def generate_anbn(ninput=default_ninput,n=default_n,k=default_n//3,example=0):\n",
    "    \"\"\"A simple detector for a^nb^n. Note that this does not\n",
    "    train the network to distinguish this langugage from other languages.\"\"\"\n",
    "    inputs = zeros(n)\n",
    "    outputs = zeros(n)\n",
    "    if example:\n",
    "        l = n//3\n",
    "    else:\n",
    "        l = 1+int((k-1)*rand())\n",
    "    inputs[:l] = 1\n",
    "    outputs[2*l] = 1\n",
    "    outputs = outputs.reshape(len(outputs),1)\n",
    "    return vstack([inputs]*ninput).T,outputs\n",
    "\n",
    "genfile(\"anbn\", generate_anbn)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 17,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAAXUAAAEACAYAAABMEua6AAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAGOlJREFUeJzt3XuwXWV9xvHvQ0II4SRyCaCEIBSjglWgCigghoo0UitY\np9DYdgRbZaZG+0etqO1I7EVHvAyjVIqI13ZMHbQalZsXTkUHgnS4qCRIlAwkQADlkgQiCfn1j7UP\n7OzsffZtrfWuvfbzmWFy9t5rr/PbZ4Un73nf9b6vIgIzM6uH3VIXYGZm+XGom5nViEPdzKxGHOpm\nZjXiUDczqxGHuplZjXQNdUmfl7RR0s+mOeZTku6SdJukY/It0czMetVLS/0LwJJOL0o6HXhBRCwC\n3gFcklNtZmbWp66hHhHXA49Mc8gbgS81jl0F7C3pwHzKMzOzfuTRp74AuLfp8Xrg4BzOa2Zmfcpr\noFQtj732gJlZAjNzOMcGYGHT44Mbz+1EkoPezGwAEdHacO4oj1BfCSwDVkh6JfBoRGxsWxh8KIfv\nV0lnweKvwWQPh+7X+PM3wP8ScV1xVeVH0vKIWJ66jiLU+bOBP9+o67dB3DXUJX0VeA0wX9K9wAXA\n7gARcWlEXCnpdElrgS3AudOc7hP9FDdKroJZTP/5XkH2c9zBsz/3PYquaxxJvAOYF8HHU9diVrau\noR4RS3s4ZllP3y1iU0/HjaDN0lPTfj5p6rUdPDuWMavousbUq4BzwKFu48czSvMz2eX13zX+bA71\nUWqpT6YuoA/9/r2eLKKICplMXUDBJlMXUCUO9ZxExGSXQ55q/DmSLfUePl/lSLvcldXWKH62fvjz\njReHenlGOtRHzOyWP83GhkO9PKPe/TJK5rb8aTY2HOrlcUu9PG8HHgImUhdiVrY87lO33ky11AO3\n1AsVwQaJQ3j2Z242Nhzq5WluqU8N4LmlXpAItqauwSwFd7+Up133y+5IvgZmlhsHSlkiAverm1nB\nHOrlcqibWaEc6uXybY0Fk5gncUvj655XtjOrC4d6uTxYWrx5wAESy4F/TFyLWekc6uWaCvXm2xod\n6vmaC2wCtuLJRzaGHOrlcvdL8SaAzWTB7lC3seNQL5cHSos31VLfjEPdxpBDvVxuqRdvKtTdUrex\n5Bml5XJLvXjfB1YBL8WhbmPIoV4uh3rBItgCbJF4EPhB6nrMyuZQL1dz94v3KS1QBDtS12CWgvvU\ny+WWupkVyqFeLg+UmlmhHOrlckvdzArlUC+XQ71gEp+ReEPja3n9Fxs3DvVyufuleIc2fX0/sH+i\nOsyScKiXyy314k2QTTwCeALvU2pjxqFeLu9TWrypGaXgpQJsDDnUy+Wld4vXHOpeKsDGjkO9XN6n\ntHjN3S8OdRs7DpMyeZ/SMrwCeKjx9SZgr4S1mJXOywSU7ymyEJ8K9R2Nx1tTFlUXEaxveni2lwuw\nceOWevl8W2NJHOg2jhzq5fNgqZkVxqFePu9TamaFcaiXz90vZlYYh3r5fPdLQSROkljR9FgSM1LW\nZFY2h3r53FIvzn7AnKbHZwJfT1SLWRJdQ13SEklrJN0l6fw2r8+XdLWkWyX9XNI5hVRaH26pF2cu\n2dIAUzbjtV9szEwb6pJmABcDS4AjgaWSjmg5bBlwS0QcDSwGPiHJ97935lAvTvMSAeAZpTaGurXU\njwPWRsS6iNgGrADOaDnmfmBe4+t5wG8iYnu+ZdaKu1+K41C3sdetRb0AuLfp8Xrg+JZjLgN+KOk+\nsv+BzsqvvFpyS704zeu+0Pja3S82VrqFevRwjg8At0bEYkmHA9+TdFREbGo9UNLypoeTETHZc6X1\n4ZZ6cT4GO+10tAnYM1EtZgORtJisK3sg3UJ9A7Cw6fFC2GltDYATgH8DiIhfSbobeBFwc+vJImL5\noIXWiFvqBYmgtSHxKHBAilrMBtVo7E5OPZZ0QT/v79anfjOwSNKhkmYBZwMrW45ZA5za+OYHkgX6\nr/spYsw41EsSQUT09NumWW1M21KPiO2SlgHXADOAyyNitaTzGq9fCnwY+IKk28hC6r0R8duC6x5l\n7n4xs8IoW+K7hG8kRUR4Z3dpPtltoLsDBwN3A78l4lNJ6zKzSuo3Oz2jtHzep9TMCuNQL5+X3i2I\nxCqJQ1uem+n1X2ycONTL531Ki3Mou+4g9R3gtPJLMUvDQVI271NapNYZpZCt/+JZpTY2HOppONRz\n1uhi2QN4ouUlLxVgY8WhnoZva8zfBLClzX3pDnUbKw71NDxYmr92XS/g9V9szDjU02h3W6NDfTj3\nA0e1ef4x/FuQjRGve55Guz51B88QIngaeLjN8xcmKMcsGbfU0/BAqZkVwqGehgdKzawQDvU03FI3\ns0I41NNo11J3qJvZ0BzqaXigNGcS75bYZTMBCUnMSVGTWQoO9TTc/ZK/+R2eXwjcWWYhZik51NPw\nQGn+ppt85BmlNjYc6mm4pZ6/TqG+GZiQ8AYtNhYc6ml4oDR/bUM9gm3AdmB26RWZJeBQT8MDpfmb\nS9Yqb8ddMDY2vExAGu5+yd/ZPPtzbfUg+A4YGw8O9TS8T2nOItr2p0+99pIyazFLyd0vaXjpXTMr\nhEM9De9TamaFcIik4H1KzawgDvV0HOpmljuHejqeVZoTiXkS90zz+iyJPcusySwVh3o6HizNzzxg\nxjSvXwD8fUm1mCXlUE/H+5Tmp9MSAVM8+cjGhkM9Hc8qzc8EnWeTgkPdxohDPR0PlOanW0t9Mw51\nGxMO9XQ8UJofd7+YNXiZgHTcUs/Pd4EfTPP6o2UVYpaaQz0dL7+bkwi2M02fegQ/BH5YXkVm6bj7\nJR0PlJpZ7hzq6bj7xcxy1zXUJS2RtEbSXZLO73DMYkm3SPq5pMncq6wnD5SaWe6m7VOXNAO4GDgV\n2AD8VNLKiFjddMzewL8DfxQR6yV12tXdduaWupnlrltL/ThgbUSsi4htwArgjJZj3gJ8PSLWA0TE\nw/mXWUseKM2JxJcl3tzlmH0kdzda/XX7S74AuLfp8frGc80WAftKuk7SzZL+Ks8Ca8wDpfmZz7P/\nSHbyy8ZxZrXW7ZbG6OEcuwN/ALyWbB/IGyTdGBF3DVtczbn7JT8TTD/5iMbrE2T7lZrVVrdQ3wAs\nbHq8kKy13uxe4OGIeBJ4UtKPgKOAXUJd0vKmh5MRMdlvwTXifUrz021GKXipABsRkhYDiwd9f7dQ\nvxlYJOlQ4D6yHduXthzzLeDixqDqHsDxwCfbnSwilg9aaA156d389BLqXirARkKjsTs59VjSBf28\nf9pQj4jtkpYB15CtV315RKyWdF7j9UsjYo2kq4HbyQLqsoi4o69PMZ4671MasSNRTaOq1+4Xh7rV\nXtdlAiLiKuCqlucubXn8ceDj+ZZWcxGB9BRZ63wq2Hc0Hm9NWdoI+j26/8weIBv/Mas1r/2SlkM9\nBxE80cMx55RQillyvm83Lc8qNbNcOdTT8m2NZpYrh3pazbc1+g4YMxuaQz0tzyo1s1w51NNy98uQ\nJE6Rdr47q8Nxe0jsXUZNZik51NPyQOnw5gHbejjuj4EvFluKWXoO9bTcUh/eXKbZyq7J1NovZrXm\nUE/Ly+8Or5clAsAzSm1MONTT8kDp8BzqZk0c6mm5+2V4vaz7Au5+sTHhZQLS8kDp8D5Eb42Tx6H7\ncgJmo86hnpZb6kOK4Gng6R6OexR4cfEVmaXl7pe0PFBqZrlyqKflgVIzy5VDPS13v5hZrhzqaXmf\n0iFJzyyEZmY41FPzPqXDWyPxgl4OlNhXYnbRBZml5FBPq/M+pdarveltmQCArwKnFFiLWXIOj5Qi\nAverD6vXGaXgWaU2Bhzq6TnUByQxg2wMotdJRQ51qz2HenqeVTq4CWBLBNHj8V4qwGrPoZ6eW+qD\n63XdlyluqVvtOdTT8z6lA4pgA/D8Pt7yAD0sKWA2yrz2S3qeVTqECLb3ceyni6zFrArcUk/P3S9m\nlhuHenoeKDWz3DjU03NL3cxy41BPz8vvDsjrvpjtyqGengdKB/cPEhf2erDETImDiizILDWHenru\nfhncBLClj+MPAlYVVItZJTjU0/NA6eD6WfcFsoW/PPnIas2hnp5b6oPrN9Q3ARPui7c6c6in54HS\nwc2l92V3iWAbsB28prrVl0M9PQ+UDm4v+mupg9d/sZrzMgHpuftlcH8CfXel/BL/o2k11rWlLmmJ\npDWS7pJ0/jTHHStpu6Q/zbfE2vM+pQOKICLY0ed7Tozg3qJqMktt2lCXNAO4GFgCHAkslXREh+M+\nClxN/y2nced9Ss0sN91a6scBayNiXURsA1YAZ7Q57l3AFcBDOdc3DrxPqZnlpltwLICdflVd33ju\nGZIWkAX9JY2net2FxsD7lJpZrrqFei8BfRHwvsjCSbj7ZRAO9T5JqLFHqZk16Xb3ywZgYdPjhWSt\n9WYvB1ZIApgPvF7StohY2XoyScubHk5GxGS/BdfU78imvPu2xt7NA+4BntPPmyT2AYjgkSKKMhuW\npMXA4oHfnzWwO558JnAn8FrgPuAmYGlErO5w/BeAb0fEN9q8FhHhVnw70nnA84BDgAeBrcBlRGxI\nWleFSRwMrIrYuTuwh/f9G/BkBP9aTGVm+eo3O6dtqUfEdknLgGuAGcDlEbFaWQgREZcOVa1N8T6l\n/et3iYApmyBrrZvVUdfJRxFxFXBVy3Ntwzwizs2prnHjWaX9m6CPJQKabCL7jcislnzbXDV4oLR/\ng7bUvVKj1ZpDvRq8/G7/5gCPD/A+r/1itea1X6rBLfU+RfAdie8O8NaHgMfyrsesKhzq1eDldwcQ\n0f9EtwiuB64voByzSnD3SzV4oNTMcuFQrwZ3v5hZLhzq1eCBUjPLhUO9GtxS75PELO81arYrh3o1\neKC0f18B/nyQN0oc7sXArK4c6tXggdL+DTr5COBGYL8cazGrDId6Nbj7pX/DhPomsmUGzGrHoV4N\nHijt3zCh7qUCrLYc6tUw1VL3Ko29m2C4lrpD3WrJoV4N3qe0f7vjUDfbhZcJqIKIQHqKrHU+Few7\nGo+3piytqiJ4/hBvX0v28zWrHYd6dTjUSxLBstQ1mBXFv95XhwdLzWxoDvXq8G2NZjY0h3p1eJ9S\nMxuaQ706PKu0RxIzJf9szNpxqFeHu196dzItm6H3Q2KuxMIc6zGrDId6dXigtHdzyWaFDup1wKdz\nqsWsUhzq1eGWeu+GWSIAvPaL1ZhDvTq8/G7v8gh1zyi1WnKoV4cHSns3bPeLQ91qy6FeHe5+6d1M\n4JEh3u/uF6stLxNQHR4o7VEEHx7yFI8D6/OoxaxqHOrV4ZZ6SSJ4FDghdR1mRXD3S3V4oNTMhuZQ\nrw4PlJrZ0Bzq1eHuFzMbmkO9OjxQ2qPGNH//3TVrw/9jVIf3Ke3dLcDhw5xA4jDJ96pb/TjUq8P7\nlPZu2BmlAJcAJ+VQi1mlODCqIiJwv3qv8gh1zyq1WnKoV4tDvQuJGWRjDU8MeSqHutVST6EuaYmk\nNZLuknR+m9f/QtJtkm6X9BNJL8u/1LHgwdLuJoAtEcSQ59mMlwqwGuoa6pJmABcDS4AjgaWSjmg5\n7NfAyRHxMuBfgM/mXeiYcEu9uznAfTmcxy11q6VeWurHAWsjYl1EbANWAGc0HxARN0TEY42Hq4CD\n8y1zbDTvU+pQbyOC+yN4cQ6nWke2BoxZrfSy9ssC4N6mx+uB46c5/q+BK4cpaow1t9Snbmt090sB\nIrgsdQ1mRegl1Hvuu5R0CvA24MQOry9vejgZEZO9nntMuPvFbMxJWgwsHvT9vYT6Bthpk96FtFm2\ntDE4ehmwJCLarnUdEcsHqHGceKDUbMw1GruTU48lXdDP+3vpU78ZWCTpUEmzgLOBlc0HSDoE+Abw\nlxGxtp8CbCduqZvZULq21CNiu6RlwDXADODyiFgt6bzG65cCHwT2AS6RBLAtIo4rruza8vK7XUjM\nIZuq9WTqWsyqSNlExhK+kRQRoe5HjjHpBOA0sn8gZwIPATcScXXSuipE4r3AARG8Z8jz7AEcHsEd\n+VRmVox+s9MzSqvF3S/dTTD8EgEAB5L99mlWKw71avFAaXd5rPsC2YxSTz6y2nGoV4tb6t3lFeqb\ngAkJdwlarTjUq8UDpd3NJWtlDyWCbcB2YPbQFZlViEO9WrxPaXdPA23nQQzA679Y7fQy+cjK4+6X\nLiJ4S46nW4X/H7Ca8V/oavFAaYkieEPqGszy5u6XavE+pWY2FId6tXifUjMbisOiSrxPqZkNyaFe\nPQ71DiQksX/qOsyqzKFePR4s7Wwe8Ku8TiaxQOKgvM5nVgUO9epxS72zvGaTTvlbsk1dzGrDoV49\n3qe0s7wW85riyUdWOw716vE+pZ3lskRAEy/qZbXjUK8ed790lnf3i1vqVjsO9erxQGlnM8n2zM2L\nQ91qx8sEVI9b6h1EcC1wbY6nvB+4N8fzmSXnUK8eL79bkghuAG5IXYdZntz9Uj1eftfMBuZQrx53\nv5jZwBzq1eOBUjMbmEO9etxS70BiX4k9U9dhVmUO9erxQGlnlwBn5nlCiWMl3zBg9eFQrx4PlHaW\n9+QjgCuBfXI+p1kyDvXqcfdLZ0WEuicgWa041KvHA6WdFRHqXv/FasWhXj3ep7SzvFdpBLfUrWYc\n6tXjfUo72wQ8XsA5HepWGx71r5qIQHqKrHU+Few7Go+3piwttQiOKeC0twJPFnBesyQc6tXkUC9J\nBO9LXYNZnvwrfTV5sNTMBuJQrybf1mhmA3GoV5P3KTWzgTjUq8n7lLaQmC1xQOo6zKqua6hLWiJp\njaS7JJ3f4ZhPNV6/TVIRdyiMG3e/7OoEYEXeJ5WYL3FE3uc1S2XaUJc0A7gYWAIcCSyVdETLMacD\nL4iIRcA7yBZdGjuSFud4usoNlOb8+QYxl2z2Z95Ohis+W8B5K6MC165Qdf98/ep2S+NxwNqIWAcg\naQVwBrC66Zg3Al8CiIhVkvaWdGBEbCyg3ipbDEzmdK52LfXjkBbldP6+/SG8GemgVN//bXzuxBt4\n1b7oJW/J87z/xD///kWsfyH6s1zPWyWpr13RKvb5niLiipQFdAv1Bey8Me964PgejjkYGLdQz1O7\nlvr+jf+S2A/2A16Y6vvPZuvzD2Tj7LxreBF3HrAb8/bM+7xVkvraFa1iny/5RLZuoR49nkctj9u+\nT+LbLU89GcFZbY6bA/x3m1OMxfEH8MA+B7Jx/73Yohs44QZgdvPxj7D3jNO49rWt59mD3z39Y179\ng9bn8zh+PRc/5yTefkhR5+92/Lc448QT+ck9ZI2I3BzCPc/Zwkl7HctN536AD9/6Jr75YOsxf8Nl\nR9/GUbsM0o7K8Xdw6qJj+fBhVakn7+P3yrrmFvR6fBH1nMMX73gnn1nVemwKiuic25JeCSyPiCWN\nx+8HdkTER5uO+Q9gMiJWNB6vAV7T2v0iqdd/IMzMrElEtDacO+rWUr8ZWCTpUOA+4GxgacsxK4Fl\nwIrGPwKPtutP76coMzMbzLShHhHbJS0DrgFmAJdHxGpJ5zVevzQirpR0uqS1wBbg3MKrNjOztqbt\nfjEzs9FS+IzSXiYvjTJJ6yTdLukWSTelrmdYkj4vaaOknzU9t6+k70n6paRrJe2dssZhdPh8yyWt\nb1zDWyQtSVnjMCQtlHSdpF9I+rmkdzeeH/lrOM1nq8X1kzRb0ipJt0q6Q9JHGs/3de0Kbak3Ji/d\nCZwKbAB+CiyNiNXTvnGESLobeHlE/DZ1LXmQ9GqyST5fjoiXNp67EHg4Ii5s/MO8T0SM5JK1HT7f\nBcCmiPhk0uJyIOm5wHMj4lZJE8D/AWeSdYuO9DWc5rOdRX2u35yIeELSTODHwHvI5gL1fO2Kbqk/\nM3kpIraRTfM+o+DvmUJtBoEj4nrgkZann5lg1vjzzFKLylGHzwc1uYYR8UBE3Nr4ejPZRMEF1OAa\nTvPZoD7X74nGl7PIxjEfoc9rV3Sot5uYlOt9xhUQwPcl3Szp7amLKUjzDOGNwIEpiynIuxprF10+\nil0T7TTuWjsGWEXNrmHTZ7ux8VQtrp+k3STdSnaNrouIX9DntSs61MdhFPbEiDgGeD3wzsav97UV\nWX9d3a7rJcBhwNHA/cAn0pYzvEb3xNeBv4uInTbrHvVr2PhsV5B9ts3U6PpFxI6IOJpsVv7Jkk5p\neb3rtSs61DcAC5seLyRrrddGRNzf+PMh4H/IupzqZmOjPxNJzwN2mWU3yiLiwWgAPseIX0NJu5MF\n+lci4puNp2txDZs+239Ofba6XT+AiHgM+C7wcvq8dkWH+jOTlyTNIpu8tLLg71kaSXMkzW18vRdw\nGvCz6d81klYCb218/Vbgm9McO3Ia/6NMeRMjfA0lCbgcuCMiLmp6aeSvYafPVpfrJ2n+VNeRpD2B\n1wG30Oe1K/w+dUmvBy7i2clLHyn0G5ZI0mFkrXPIJnL916h/PklfBV4DzCfrv/sg8C3ga8AhwDrg\nrIh4NFWNw2jz+S4gW2HzaLJfa+8GzhvVVUYlnQT8CLidZ39Nfz9wEyN+DTt8tg+QzXIf+esn6aVk\nA6G7Nf77SkR8TNK+9HHtPPnIzKxGvJ2dmVmNONTNzGrEoW5mViMOdTOzGnGom5nViEPdzKxGHOpm\nZjXiUDczq5H/BywtAorUThfbAAAAAElFTkSuQmCC\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x7fbb854826d0>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "plotseq(\"rnntest-anbn.h5\")"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 18,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "writing timing\n",
      "done writing timing\n"
     ]
    }
   ],
   "source": [
    "def generate_timing(ninput=default_ninput,n=default_n,t=5,example=0):\n",
    "    \"\"\"A simple timing related task: output a spike if no spike occurred within\n",
    "    t time steps before.\"\"\"\n",
    "    x = 0\n",
    "    inputs = []\n",
    "    while x<n:\n",
    "        inputs.append(x)\n",
    "        x += max(1,0.5*t*randn()+t)\n",
    "    inputs = [-999990]+inputs\n",
    "    outputs = []\n",
    "    for i in range(1,len(inputs)):\n",
    "        if inputs[i]-inputs[i-1]>t:\n",
    "            outputs.append(inputs[i])\n",
    "    inputs = inputs[1:]\n",
    "    xs = zeros((n,ninput))\n",
    "    xs[inputs,:] = 1.0\n",
    "    ys = zeros((n,1))\n",
    "    ys[outputs,:] = 1.0\n",
    "    return xs,ys\n",
    "\n",
    "genfile(\"timing\", generate_timing)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 19,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "writing revtiming\n",
      "done writing revtiming\n"
     ]
    }
   ],
   "source": [
    "def generate_revtiming(ninput=default_ninput,n=default_n,t=5,example=0):\n",
    "    \"\"\"A simple timing related task: output a spike if no spike occurs within\n",
    "    t time steps after. This cannot be learned using a causal model (it requires\n",
    "    a reverse model).\"\"\"\n",
    "    x = 0\n",
    "    inputs = []\n",
    "    while x<n:\n",
    "        inputs.append(x)\n",
    "        x += max(1,0.5*t*randn()+t)\n",
    "    inputs = inputs+[999999]\n",
    "    outputs = []\n",
    "    for i in range(len(inputs)-1):\n",
    "        if inputs[i+1]-inputs[i]>t:\n",
    "            outputs.append(inputs[i])\n",
    "    inputs = inputs[:-1]\n",
    "    xs = zeros((n,ninput))\n",
    "    xs[inputs,:] = 1.0\n",
    "    ys = zeros((n,1))\n",
    "    ys[outputs,:] = 1.0\n",
    "    return xs,ys\n",
    "\n",
    "genfile(\"revtiming\", generate_revtiming)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 20,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "writing biditiming\n",
      "done writing biditiming\n"
     ]
    }
   ],
   "source": [
    "def generate_biditiming(ninput=default_ninput,n=default_n,t=5,example=0):\n",
    "    x = 0\n",
    "    inputs = []\n",
    "    while x<n:\n",
    "        inputs.append(x)\n",
    "        x += max(1,0.5*t*randn()+t)\n",
    "    inputs = [-999999]+inputs+[999999]\n",
    "    outputs = []\n",
    "    for i in range(1,len(inputs)-1):\n",
    "        if inputs[i+1]-inputs[i]>=t and inputs[i]-inputs[i-1]>=t:\n",
    "            outputs.append(inputs[i])\n",
    "    inputs = inputs[1:-1]\n",
    "    xs = zeros((n,ninput))\n",
    "    xs[inputs,:] = 1.0\n",
    "    ys = zeros((n,1))\n",
    "    ys[outputs,:] = 1.0\n",
    "    return xs,ys\n",
    "\n",
    "genfile(\"biditiming\", generate_biditiming)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 21,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "def detect_12(x):\n",
    "    n = len(x)\n",
    "    y = zeros(n)\n",
    "    state = 0\n",
    "    for i in range(n):\n",
    "        s = tuple(1*(x[i]>0.5))\n",
    "        if s==(0,0): pass\n",
    "        elif s==(1,0): state = 1\n",
    "        elif s==(0,1) and state==1:\n",
    "            y[i] = 1\n",
    "            state = 0\n",
    "        else: state = 0\n",
    "    return y"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 22,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "writing detect\n",
      "done writing detect\n"
     ]
    }
   ],
   "source": [
    "def generate_detect(n=default_n,ninput=default_ninput,m=3,r=0.5,example=0):\n",
    "    \"\"\"Generates a random sequence of bits and outputs a \"1\" whenever there is\n",
    "    a sequence of inputs 01-00*-10\"\"\"\n",
    "    x = rand(n,2)\n",
    "    x = filters.gaussian_filter(x,(r,0))\n",
    "    x = 1.0*(x>roll(x,-1,0))*(x>roll(x,1,0))\n",
    "    y = detect_12(x)\n",
    "    return x,y.reshape(len(y),1)\n",
    "\n",
    "genfile(\"detect\", generate_detect)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 23,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "writing revdetect\n",
      "done writing revdetect\n"
     ]
    }
   ],
   "source": [
    "def generate_revdetect(n=default_n,ninput=default_ninput,m=3,r=0.5,example=0):\n",
    "    \"\"\"Reverse of generate_detect.\"\"\"\n",
    "    xs,ys = generate_detect(n=n,ninput=ninput,m=m,r=r,example=example)\n",
    "    return array(xs)[::-1],array(ys)[::-1]\n",
    "\n",
    "genfile(\"revdetect\", generate_revdetect)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 24,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "writing bididetect\n",
      "done writing bididetect\n"
     ]
    }
   ],
   "source": [
    "def generate_bididetect(n=default_n,ninput=default_ninput,m=3,r=0.5,example=0):\n",
    "    \"\"\"Generate a particular pattern whenever there is some input trigger.\"\"\"\n",
    "    xs,ys = generate_detect(n=n,ninput=ninput,m=m,r=r,example=example)\n",
    "    rys = detect_12(xs[::-1])[::-1].reshape(len(ys),1)\n",
    "    return array(xs),array(ys*rys)\n",
    "\n",
    "genfile(\"bididetect\", generate_bididetect)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 25,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "def generate_predict_and_sync():\n",
    "    \"\"\"Similar to smod, but the correct output is provided one step after\n",
    "    the required prediction for resynchronization.\"\"\"\n",
    "    pass"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 26,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "def generate_distracted_recall():\n",
    "    \"\"\"Distracted sequence recall example.\"\"\"\n",
    "    pass"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 27,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "def generate_morse():\n",
    "    \"\"\"Morse code encoding/decoding.\"\"\"\n",
    "    pass\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 28,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "def genseq_timing1(n=30,threshold=0.2,m=4,example=0):\n",
    "    \"\"\"Returns an output for every input within m time steps.\n",
    "    A 1 -> N -> 1 problem.\"\"\"\n",
    "    x = (rand(n)<threshold)\n",
    "    l = find(x)\n",
    "    y = zeros(len(x))\n",
    "    for i in range(1,len(l)):\n",
    "        if l[i]-l[i-1]<m: y[l[i]] = 1\n",
    "    return (1.0*x).reshape(n,1),y.reshape(n,1)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 29,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "def genseq_threshold1(n=30,d=3,threshold=0.5,c=0,scale=1.0):\n",
    "    \"\"\"Threshold on the first component only.\"\"\"\n",
    "    x = randn(n,d)\n",
    "    y = (1.0*(x[:,c]>threshold)).reshape(len(x),1)\n",
    "    x[:,c] *= scale\n",
    "    return x,y"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 30,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "writing delay1\n",
      "done writing delay1\n",
      "writing delay2\n",
      "done writing delay2\n",
      "writing delay3\n",
      "done writing delay3\n",
      "writing rdelay1\n",
      "done writing rdelay1\n",
      "writing rdelay2\n",
      "done writing rdelay2\n",
      "writing rdelay3\n",
      "done writing rdelay3\n"
     ]
    }
   ],
   "source": [
    "def genseq_delay(n=30,threshold=0.2,d=1):\n",
    "    \"\"\"Returns an output for every input within m time steps.\n",
    "    A 1 -> N -> 1 problem.\"\"\"\n",
    "    x = array(rand(n)<threshold,'f')\n",
    "    y = roll(x,d)\n",
    "    if d>0: y[:d] = 0\n",
    "    elif d<0: y[d:] = 0\n",
    "    return x.reshape(n,1),y.reshape(n,1)\n",
    "\n",
    "genfile(\"delay1\", genseq_delay)\n",
    "genfile(\"delay2\", lambda:genseq_delay(d=2))\n",
    "genfile(\"delay3\", lambda:genseq_delay(d=3))\n",
    "genfile(\"rdelay1\", lambda:genseq_delay(d=-1))\n",
    "genfile(\"rdelay2\", lambda:genseq_delay(d=-2))\n",
    "genfile(\"rdelay3\", lambda:genseq_delay(d=-3))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 31,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "data": {
      "image/png": "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\nx3GcFvGfaBERhTpdykcAAAAASUVORK5CYII=\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x7fbb853ae990>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "plotseq(\"rnntest-delay2.h5\")"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# Test Run with `clstmseq`"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Here is a simple example of sequence training with `clstmseq`. It takes one of the HDF5 files we generated above as an example. By default, it uses every tenth training sample as part of a test set. The `TESTERR` it reports is MSE error and binary error rate (assuming a threshold of 0.5)."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 34,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "got 50000 training samples\n",
      "ninput 1 noutput 2\n",
      "\n",
      "0\n",
      "INP __!_!_________!_!_______!_____\n",
      "OUT @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@\n",
      "TRU ___@_@_________@_@_______@____\n",
      "\n",
      "\n",
      "5000\n",
      "INP __!______!_!__!________!_!__!!\n",
      "OUT ___@______@_@__@________@_@__@\n",
      "TRU ___@______@_@__@________@_@__@\n",
      "\n",
      "TESTERR 7.96989e-08 2.0849e-07 CERR 0 0 N 5000 at 10000\n",
      "\n",
      "15000\n",
      "INP ______________!___!!!__!____!_\n",
      "OUT _______________@___@@@__@____@\n",
      "TRU _______________@___@@@__@____@\n",
      "\n",
      "TESTERR 1.69989e-08 4.44687e-08 CERR 0 0 N 5000 at 20000\n"
     ]
    }
   ],
   "source": [
    "!lrate=1e-3 report_every=5000 ntrain=20000 test_every=10000 ../clstmseq rnntest-delay1.h5"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 2",
   "language": "python",
   "name": "python2"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 2
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython2",
   "version": "2.7.6"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 0
}
